Skip to content

Commit

Permalink
instruction-check:Add another way to use instruction-check
Browse files Browse the repository at this point in the history
1. Added dynamic generation of Avocado test classes from feature_list.py into cpuid_test.py.
2. Fixed some errors in README.

Signed-off-by: Haoliang Zhu<[email protected]>
  • Loading branch information
haoliang-Zhu authored and ysun committed May 30, 2024
1 parent 500758f commit e17a64a
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 51 deletions.
23 changes: 19 additions & 4 deletions BM/instruction-check/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,27 @@ The Instruction Check project utilizes the Avocado Test Framework, so it needs t
After installing the framework, you also need to install the HTML plugin for generating test results in HTML format. You can do this by running the following command:
``pip install avocado-framework-plugin-result-html``

## Usage
## Usage 1

### 1. ompile the cpuid_check tool
### 1. Compile the cpuid_check tool
Run the command:
``./setuo.sh``
``./setup.sh``

### 2. Execute instruction_check.py
Run the command:
``./ininstruction_check.py`` or ``python instruction_check.py``
``./instruction_check.py`` or ``python instruction_check.py``

## Usage 2
Usage 1 assembles each test into an Avocado job, so it can be executed directly by calling the Python interpreter. We also provide another method, which generates Avocado test classes based on the information in feature_list.py and writes them into the file cpuid_test.py.

### 1. Compile the cpuid_check tool
Run the command:
``./setup.sh``

### 2. Generate Avocado tests
Run the command:
``./auto_gen_test.py`` or ``python auto_gen_test.py``

### 3. Use Avocado to run tests
Run the command:
``avocado run cpuid_test.py``
36 changes: 36 additions & 0 deletions BM/instruction-check/auto_gen_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/usr/bin/python
import os
from feature_list import cpuid_info

# Template string, used to generate code for each test class
class_template = """
class {class_name}(Test):
def test(self):
cmd = os.path.join(source_dir, file_name + ' ' + ' '.join({args}))
cmd_result = process.run(cmd, ignore_status=True)
self.assertEqual(cmd_result.exit_status, expected_result)
"""

def generate_cpuid_tests():
with open('cpuid_test.py', 'w') as f:
script_dir = os.path.dirname(__file__)
parent_dir = os.path.dirname(script_dir)
grandparent_dir = os.path.dirname(parent_dir)
source_dir = f"{grandparent_dir}/tools/cpuid_check"
# Write the necessary imports and variable definitions
f.write(f'''#!/usr/bin/python
import os
from avocado import Test
from avocado.utils import process
source_dir = "{source_dir}"
file_name = "cpuid_check"
expected_result = 0
''')
# For each feature in feature_list.py generates a test class
for feature, args in cpuid_info.items():
class_code = class_template.format(class_name=feature, args=args)
f.write(class_code)

generate_cpuid_tests()
94 changes: 47 additions & 47 deletions BM/instruction-check/feature_list.py
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
cpuid_info = {
"AESNI": ['1', '0', '0', '0', 'c', '25'],
"XSAVE": ['1', '0', '0', '0', 'c', '26'],
"FSGSBASE": ['7', '0', '0', '0', 'b', '0'],
"SMEP": ['7', '0', '0', '0', 'b', '7'],
"RDT_A": ['7', '0', '0', '0', 'b', '15'],
"AVX512_IFMA": ['7', '0', '0', '0', 'b', '21'],
"SHA_NI": ['7', '0', '0', '0', 'b', '29'],
"AVX512_VBMI": ['7', '0', '0', '0', 'c', '1'],
"UMIP": ['7', '0', '0', '0', 'c', '2'],
"WAITPKG": ['7', '0', '0', '0', 'c', '5'],
"AVX512_VBMI2": ['7', '0', '0', '0', 'c', '6'],
"CET_SS": ['7', '0', '0', '0', 'c', '7'],
"GFNI": ['7', '0', '0', '0', 'c', '8'],
"VAES": ['7', '0', '0', '0', 'c', '9'],
"AVX512_VNNI": ['7', '0', '0', '0', 'c', '11'],
"AVX512_BITALG": ['7', '0', '0', '0', 'c', '12'],
"RDPID": ['7', '0', '0', '0', 'c', '22'],
"KL": ['7', '0', '0', '0', 'c', '23'],
"CLDEMOTE": ['7', '0', '0', '0', 'c', '25'],
"MOVDIRI": ['7', '0', '0', '0', 'c', '27'],
"MOVDIR64B": ['7', '0', '0', '0', 'c', '28'],
"PKS": ['7', '0', '0', '0', 'c', '31'],
"UINTR": ['7', '0', '0', '0', 'd', '5'],
"AVX512_VP2INTERSECT": ['7', '0', '0', '0', 'd', '8'],
"SERIALIZE": ['7', '0', '0', '0', 'd', '14'],
"TSXLDTRK": ['7', '0', '0', '0', 'd', '16'],
"CET_IBT": ['7', '0', '0', '0', 'd', '20'],
"AMX_BF16": ['7', '0', '0', '0', 'd', '22'],
"AVX512_FP16": ['7', '0', '0', '0', 'd', '23'],
"AMX_TILE": ['7', '0', '0', '0', 'd', '24'],
"AMX_INT8": ['7', '0', '0', '0', 'd', '25'],
"AVX_VNNI": ['7', '0', '1', '0', 'a', '4'],
"FRED": ['7', '0', '1', '0', 'a', '17'],
"WRMSRNS": ['7', '0', '1', '0', 'a', '19'],
"AMX_FP16": ['7', '0', '1', '0', 'a', '21'],
"AVX_IFMA": ['7', '0', '1', '0', 'a', '23'],
"AVX_VNNI_INT8": ['7', '0', '1', '0', 'd', '4'],
"AVX_NE_CONVERT": ['7', '0', '1', '0', 'd', '5'],
"XFD": ['d', '0', '1', '0', 'a', '4'],
"KL_BITMAP0": ['19', '0', '0', '0', 'a', '0'],
"KL_BITMAP1": ['19', '0', '0', '0', 'a', '1'],
"KL_BITMAP2": ['19', '0', '0', '0', 'a', '2'],
"AESKLE": ['19', '0', '0', '0', 'b', '0'],
"AES_WIDE": ['19', '0', '0', '0', 'b', '2'],
"KL_IWKEYBACKUP": ['19', '0', '0', '0', 'b', '4'],
"KL_RANDOM_IWKEY": ['19', '0', '0', '0', 'c', '1']
# Add more cpuid_info here
"AESNI": ['1', '0', '0', '0', 'c', '25'],
"XSAVE": ['1', '0', '0', '0', 'c', '26'],
"FSGSBASE": ['7', '0', '0', '0', 'b', '0'],
"SMEP": ['7', '0', '0', '0', 'b', '7'],
"RDT_A": ['7', '0', '0', '0', 'b', '15'],
"AVX512_IFMA": ['7', '0', '0', '0', 'b', '21'],
"SHA_NI": ['7', '0', '0', '0', 'b', '29'],
"AVX512_VBMI": ['7', '0', '0', '0', 'c', '1'],
"UMIP": ['7', '0', '0', '0', 'c', '2'],
"WAITPKG": ['7', '0', '0', '0', 'c', '5'],
"AVX512_VBMI2": ['7', '0', '0', '0', 'c', '6'],
"CET_SS": ['7', '0', '0', '0', 'c', '7'],
"GFNI": ['7', '0', '0', '0', 'c', '8'],
"VAES": ['7', '0', '0', '0', 'c', '9'],
"AVX512_VNNI": ['7', '0', '0', '0', 'c', '11'],
"AVX512_BITALG": ['7', '0', '0', '0', 'c', '12'],
"RDPID": ['7', '0', '0', '0', 'c', '22'],
"KL": ['7', '0', '0', '0', 'c', '23'],
"CLDEMOTE": ['7', '0', '0', '0', 'c', '25'],
"MOVDIRI": ['7', '0', '0', '0', 'c', '27'],
"MOVDIR64B": ['7', '0', '0', '0', 'c', '28'],
"PKS": ['7', '0', '0', '0', 'c', '31'],
"UINTR": ['7', '0', '0', '0', 'd', '5'],
"AVX512_VP2INTERSECT": ['7', '0', '0', '0', 'd', '8'],
"SERIALIZE": ['7', '0', '0', '0', 'd', '14'],
"TSXLDTRK": ['7', '0', '0', '0', 'd', '16'],
"CET_IBT": ['7', '0', '0', '0', 'd', '20'],
"AMX_BF16": ['7', '0', '0', '0', 'd', '22'],
"AVX512_FP16": ['7', '0', '0', '0', 'd', '23'],
"AMX_TILE": ['7', '0', '0', '0', 'd', '24'],
"AMX_INT8": ['7', '0', '0', '0', 'd', '25'],
"AVX_VNNI": ['7', '0', '1', '0', 'a', '4'],
"FRED": ['7', '0', '1', '0', 'a', '17'],
"WRMSRNS": ['7', '0', '1', '0', 'a', '19'],
"AMX_FP16": ['7', '0', '1', '0', 'a', '21'],
"AVX_IFMA": ['7', '0', '1', '0', 'a', '23'],
"AVX_VNNI_INT8": ['7', '0', '1', '0', 'd', '4'],
"AVX_NE_CONVERT": ['7', '0', '1', '0', 'd', '5'],
"XFD": ['d', '0', '1', '0', 'a', '4'],
"KL_BITMAP0": ['19', '0', '0', '0', 'a', '0'],
"KL_BITMAP1": ['19', '0', '0', '0', 'a', '1'],
"KL_BITMAP2": ['19', '0', '0', '0', 'a', '2'],
"AESKLE": ['19', '0', '0', '0', 'b', '0'],
"AES_WIDE": ['19', '0', '0', '0', 'b', '2'],
"KL_IWKEYBACKUP": ['19', '0', '0', '0', 'b', '4'],
"KL_RANDOM_IWKEY": ['19', '0', '0', '0', 'c', '1']
# Add more cpuid_info here
}

0 comments on commit e17a64a

Please sign in to comment.