Intel® oneAPI Data Parallel C++
Support for Intel® oneAPI DPC++ Compiler, Intel® oneAPI DPC++ Library, Intel ICX Compiler , Intel® DPC++ Compatibility Tool, and GDB*
582 Discussions

dpct took more than 30 minutes to convert 1200 line code

Shukla__Gagandeep
1,005 Views

Hi,

I am converting test_block_radix_sort.cu from repo cub and dpct is running from last 25 minutes. 

From task manager I can see that it is using CPU 25%. Memory consumption has gone up to 800,000+K. There are some (40+) warnings on console. I am not sure what's going on.

Current output is:

In file included from C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:45:
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:395:36: warning: result of comparison of constant 4294967295 with expression of type 'volatile unsigned short' is always true [-Wtautological-constant-out-of-range-compare]
        ((bits >= 0xFC01) && (bits <= 0xFFFFFFFF)));
                              ~~~~ ^  ~~~~~~~~~~
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:253:24: warning: DPCT1001:0: The statement could not be removed.
            if (error) break;
                       ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:253:13: warning: DPCT1000:1: Error handling if-stmt was detected but could not be rewritten.
            if (error) break;
            ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:269:24: warning: DPCT1001:2: The statement could not be removed.
            if (error) break;
                       ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:269:13: warning: DPCT1000:3: Error handling if-stmt was detected but could not be rewritten.
            if (error) break;
            ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:275:24: warning: DPCT1001:4: The statement could not be removed.
            if (error) break;
                       ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:275:13: warning: DPCT1000:5: Error handling if-stmt was detected but could not be rewritten.
            if (error) break;
            ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:278:24: warning: DPCT1001:6: The statement could not be removed.
            if (error) break;
                       ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:278:13: warning: DPCT1000:7: Error handling if-stmt was detected but could not be rewritten.
            if (error) break;
            ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:252:30: warning: DPCT1003:8: Migrated API does not return error code. (*, 0) is inserted. You may need to rewrite this code.
            error = CubDebug(cudaGetDeviceCount(&deviceCount));
                             ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:268:30: warning: DPCT1003:9: Migrated API does not return error code. (*, 0) is inserted. You may need to rewrite this code.
            error = CubDebug(cudaSetDevice(dev));
                             ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:277:30: warning: DPCT1003:10: Migrated API does not return error code. (*, 0) is inserted. You may need to rewrite this code.
            error = CubDebug(cudaGetDeviceProperties(&deviceProp, dev));
                             ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:280:17: warning: DPCT1005:11: The device version is different. You need to rewrite this code.
            if (deviceProp.major < 1) {
                ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:296:21: warning: DPCT1005:12: The device version is different. You need to rewrite this code.
                    deviceProp.major * 100 + deviceProp.minor * 10,
                    ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:997:1: warning: DPCT1011:13: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(char, char)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:998:1: warning: DPCT1011:14: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(short, short)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:999:1: warning: DPCT1011:15: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(int, int)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1000:1: warning: DPCT1011:16: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(long, long)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1001:1: warning: DPCT1011:17: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(longlong, long long)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1002:1: warning: DPCT1011:18: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(uchar, unsigned char)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1003:1: warning: DPCT1011:19: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(ushort, unsigned short)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1004:1: warning: DPCT1011:20: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(uint, unsigned int)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1005:1: warning: DPCT1011:21: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(ulong, unsigned long)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1006:1: warning: DPCT1011:22: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(ulonglong, unsigned long long)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1007:1: warning: DPCT1011:23: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(float, float)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1008:1: warning: DPCT1011:24: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(double, double)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1601:9: warning: DPCT1026:25: The call to cudaEventCreate was removed, because this call is redundant in DPC++.
        cudaEventCreate(&start);
        ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1602:9: warning: DPCT1026:26: The call to cudaEventCreate was removed, because this call is redundant in DPC++.
        cudaEventCreate(&stop);
        ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1607:9: warning: DPCT1026:27: The call to cudaEventDestroy was removed, because this call is redundant in DPC++.
        cudaEventDestroy(start);
        ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1608:9: warning: DPCT1026:28: The call to cudaEventDestroy was removed, because this call is redundant in DPC++.
        cudaEventDestroy(stop);
        ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1613:9: warning: DPCT1012:29: Detected kernel execution time measurement pattern and generated an initial code for time measurements in SYCL. You can change the way time is measured depending on your goals.
        cudaEventRecord(start, 0);
        ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1618:9: warning: DPCT1012:30: Detected kernel execution time measurement pattern and generated an initial code for time measurements in SYCL. You can change the way time is measured depending on your goals.
        cudaEventRecord(stop, 0);
        ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:97:12: warning: DPCT1008:31: clock function is not defined in the DPC++. This is a hardware-specific feature. Consult with your hardware vendor to find a replacement.
    stop = clock();
           ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:117:12: warning: DPCT1008:32: clock function is not defined in the DPC++. This is a hardware-specific feature. Consult with your hardware vendor to find a replacement.
    stop = clock();
           ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:190:21: warning: DPCT1008:33: clock function is not defined in the DPC++. This is a hardware-specific feature. Consult with your hardware vendor to find a replacement.
    clock_t start = clock();
                    ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:390:5: warning: DPCT1026:34: The call to cudaDeviceSetSharedMemConfig was removed, because DPC++ currently does not support configuring shared memory on devices.
    cudaDeviceSetSharedMemConfig(SMEM_CONFIG);
    ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:353:18: warning: DPCT1003:35: Migrated API does not return error code. (*, 0) is inserted. You may need to rewrite this code.
    CubDebugExit(cudaMemcpy(d_keys, h_keys, sizeof(Key) * TILE_SIZE, cudaMemcpyHostToDevice));
                 ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:354:18: warning: DPCT1003:36: Migrated API does not return error code. (*, 0) is inserted. You may need to rewrite this code.
    CubDebugExit(cudaMemcpy(d_values, h_values, sizeof(Value) * TILE_SIZE, cudaMemcpyHostToDevice));
                 ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:397:18: warning: DPCT1010:37: SYCL uses exceptions to report errors and does not use the error codes. The call was replaced with 0. You need to rewrite this code.
    CubDebugExit(cudaPeekAtLastError());
                 ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:398:18: warning: DPCT1003:38: Migrated API does not return error code. (*, 0) is inserted. You may need to rewrite this code.
    CubDebugExit(cudaDeviceSynchronize());
                 ^

----------------------------------

OK. While I was writing this, dpct has converted the file successfully but it took around 30 minutes to do that. I am not sure what happened or why it took so long. Usually it takes 1 to 3 minutes on my system (Intel i5-6200 2.3 GHz/8GB RAM). May be you want to take a look into that.

Also dpct is generating some yaml files. What am I supposed to do with them. They contain text like:

---
MainSourceFile:  'c:\users\intel\downloads\cuda code\cub-1.8.0\test\dpct\test_util.h'
Replacements:
  - FilePath:        'C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h'
    Offset:          1868
    Length:          0
    ReplacementText: '#include <CL/sycl.hpp>
#include <dpct/dpct.hpp>
'
  - FilePath:        'C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h'
    Offset:          2014
    Length:          26
    ReplacementText: ''
  - FilePath:        'C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h'
    Offset:          2233
    Length:          29
    ReplacementText: '#include "cub/util_debug.dp.hpp"'
  - FilePath:        'C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h'
    Offset:          2263
    Length:          30
    ReplacementText: '#include "cub/util_device.dp.hpp"'

What is it trying to tell me via these yaml files?

Regards,
Gagan

0 Kudos
4 Replies
PrasanthD_intel
Moderator
1,005 Views

Hi Gagandeep,

We were able to reproduce your issue. It took us more than 30 mins for migration which is more than the normal.

We are forwarding this issue to the concerned team.

Regarding the yaml files generated during migration, they contain the changes done to the files during migration.

They help us to understand what are the changes made to those files.

Regards

Prasanth

0 Kudos
Subarnarek_G_Intel
916 Views

This will be a part of Beta09.


0 Kudos
Subarnarek_G_Intel
799 Views

Closing this ticket as the issue is already fixed.


0 Kudos
Subarnarek_G_Intel
799 Views

This issue has been resolved and we will no longer respond to this thread. If you require additional assistance from Intel, please start a new thread. Any further interaction in this thread will be considered community only


0 Kudos
Reply