- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
I have been trying to use the getrs() routine, but I can't seem to get pass, size = 50 when executing the code, I need to be able to measure for size close to 100,000,000. I have to call first the getrf() routine according to the documentation, and I think this is where I miss it. I would appreciate any suggestions to improve the getrf() section of program; thank you.
I am also following the matrix_multiplication with gemm code sample to generate my code;
The basic idea of what I am working on is:
1. Create a matrix, A, of size n * n;
2. Initialize the matrix A, to zero;
3. Populate the sub, super and main diagonals with -1.0, -1,0 and 2.0 or random numbers;
4. Create a vector, for the right hand side and initialize it randomly.
4. Call the getrf() routine to factorize the system (device code);
5. Call the getrs() routine to solve the system (device code);
6. Compare the results of getrs() with results of host tridiagonal solver algorithm.
Here's what I have for the first four steps (getrf() )
int main(int argc, char* argv[])
{
size_t size = atoi(argv[1]);
sycl::queue device_queue{sycl::default_selector{}};
sycl::context context = device_queue.get_context();
sycl::device device = device_queue.get_device();
int_64 i , j;
int64_t m = size, n = size, nrhs = size, lda = size;
// Allocate memory
double **A = sycl::malloc_shared<double*>(m * n, device_queue);
for(i = 0; i < lda; i++){
A[i] = sycl::malloc_shared<double>(lda, device_queue);}
// Initialize array to zero;
for(i = 0; i < m; i++){
for(j = 0; j < n; j++){
A[i][j] = 0.0;}}
// Populate sub,super, main diagonals of A
for(i = 0; i < lda; i++){
A[i][i] = 2.0; // Main diagonal
if(i < lda){
A[i][i+1] = -1.0;} // Super diagonal
if(i > 0){
A[i][i-1] = -1.0;} // Sub diagonal
}
// Other arrays
int64_t *ipiv = sycl::malloc_shared<std::int64_t>(ldb, device_queue);
auto b = sycl::malloc_shared<double>(ldb, device_queue);
//Initialize result array, b
for(i = 0; i < ldb; i++){
b[i] = 1.0;}
int64_t info = 0;
try
{
int64_t scratchpad_size_getrf = oneapi::mkl::lapack::getrf_scratchpad_size<double>(device_queue, m, n, lda);
double* scratchpad_getrf = sycl::malloc_shared<double>(scratchpad_size_getrf, device, context);
auto event1 = oneapi::mkl::lapack::getrf(device_queue, m, n, *A, lda, ipiv, scratchpad_getrf, scratchpad_getrf, scratchpad_size_getrf);
event1.wait_and_throw();
cl::sycl::fre(scartchpad_getrf, context);
} catch(oneapi::mkl::lapack::exception const& e1){
std::cout << ............
if(e1.info() > 0){
info = e1.info();
}
return info;}
}
I would appreciate any suggestions to improve this section of the program.Thank you!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
>>I would appreciate any suggestions to improve the getrf() section of program
Please refer to the sample(getri.cpp) present in $MKL_ROOT/examples/dpcpp/lapack/source folder.
Regards
Rajesh.
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
>>I would appreciate any suggestions to improve the getrf() section of program
Please refer to the sample(getri.cpp) present in $MKL_ROOT/examples/dpcpp/lapack/source folder.
Regards
Rajesh.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Can you please let us know if your issue has been resolved?
Regards
Rajesh.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Yes, thank you!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Thanks for the confirmation!
As this issue has been resolved, we will no longer respond to this thread. If you require any additional assistance from Intel, please start a new thread. Any further interaction in this thread will be considered community only.
Have a Good day.
Regards
Rajesh

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page